<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        function Animal (name, age) {
            this.name = name
            this.age = age
        }

        Animal.prototype.walk = function () {
            console.log(`${this.name} is walking`)
        }

        var cat = new Animal('Tom', 30)
        cat.walk()

        // instanceof判断一个对象是否是另一个对象的实例，cat就是Animal的实例 （主要是判断原型链的）
        console.log(cat instanceof Animal) //true
        console.log(cat instanceof Object) //true  //因为原型链往上找最后一个是obje的__proto__
        console.log(cat instanceof Function) //false  //function不在原型链上

        var arr = [4, 5, 2]
        var obj = {name: 'lisi'}
        console.log(typeof arr) //Array
        console.log(typeof obj) //Objet

        //typeof不猛区分数组和对象，单instanceof可以，typeof之能判断类型
        console.log(arr instanceof Array) //true
        console.log(arr instanceof Array) //false

        //ES5新增了一个判断数组的方法
        console.log(Array.isArray(arr)) //true
        console.log(Array.isArray(obj))//false

        // js里一切皆为对象：因为任意数据都可以沿着自己的原型链最终找到Object.prototype
        // 验证属性是否是实例自己的
        console.log(cat.hasOwnProperty('name')) //true
        console.log(cat.hasOwnProperty('walk')) //false walk在原型上
        console.log(cat.hasOwnProperty('abc')) //false abc这个属性不存在
       
        // 验证一个对象是否在另一个的原型链上
        console.log(Animal.prototype.isPrototypeOf(cat)) //true
        console.log(Object.prototype.isPrototypeOf(cat)) //true
        console.log(Function.prototype.isPrototypeOf(cat)) //false
       </script>
</body>
</html>